package com.groupa.project1.database;

import com.groupa.project1.chat.ToolsClass;
import com.groupa.project1.database.interfaces.XmlDbDataSource;
import com.groupa.project1.database.interfaces.DBActionResult;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.xmldb.api.*;
import org.xmldb.api.base.*;
import org.xmldb.api.modules.*;

import java.util.logging.*;
import java.util.Properties;
/**
 *
 * @author groupA
 */
/*Realiza tanto la configuración de acceso a la base de datos,
 * como la petición de conexiones*/
public class XmlDbDataSourceClass implements XmlDbDataSource{
    
     protected String driver; 
     protected String URI;
     Logger log;  
     ToolsClass Tools;
     private static Properties Prop;
     
    public XmlDbDataSourceClass(Properties Prop){
      this.Prop = Prop;
      log = Logger.getLogger("Testlog");
      Tools = new ToolsClass(log);
    }
    /* Pedirá una colección a la base de datos 
     * (nótese que el getCollection además 
     * encapsula la conexión a la base datos).*/
    public Collection getCollection() throws XMLDBException {
     
        Collection  c = null;
  
        String password = Prop.getProperty("XmlDbDataSource/password");
        String user = Prop.getProperty("XmlDbDataSource/user"); 
        
        try{
            c = (Collection) getCollection(user, password);    
        } catch(Exception ex) {
            log.info("Error! Al ejecutar el metodo getCollection() "); 
        }
        return c;
    }

    public Collection getCollection(String aUserName, String aPassword) throws XMLDBException {
        
        Collection col = null;  
        ToolsClass Tools = new ToolsClass(log);

        
        driver = Prop.getProperty("XmlDbDataSource/driverClassName");
        URI = Prop.getProperty("XmlDbDataSource/url");  

        try{

            Class cl = Class.forName(driver);
            Database database = (Database) cl.newInstance();
            DatabaseManager.registerDatabase(database);
            
            col = (Collection) DatabaseManager.getCollection(URI, aUserName,aPassword);
  
        } catch(Exception ex) {
            log.info("Error! Al conectar con la base de datos "); 
        }
        
        return col;
    }
    
}